using System;
using MicrosoftResearch.Infer;
using MicrosoftResearch.Infer.Distributions;
using MicrosoftResearch.Infer.Collections;
using MicrosoftResearch.Infer.Factors;

namespace MicrosoftResearch.Infer.Models.User
{
	/// <summary>
	/// Class for performing inference in model 'Model' using algorithm 'ExpectationPropagation'.
	/// </summary>
	/// <remarks>
	/// The easiest way to use this class is to wrap an instance in a CompiledAlgorithm object and use
	/// the methods on CompiledAlgorithm to set parameters and execute inference.
	/// 
	/// If you instead wish to use this class directly, you must perform the following steps:
	/// 1) Create an instance of the class
	/// 2) Set the value of any externally-set fields e.g. data, priors
	/// 3) Call the Reset() method
	/// 4) Call the Initialise() method once
	/// 5) Call the Update() method multiple times  - each call performs one iteration of inference
	/// 6) Use the XXXMarginal() methods to retrieve posterior marginals for different variables.
	/// 
	/// Generated by Infer.NET 2.3 beta 4 at 19:13 on 21 May 2010.
	/// </remarks>
	public class Model106_EP : IIterativeProcess
	{
		#region Fields
		// Messages from uses of 'vbool341'
		public Bernoulli[] vbool341_uses_B;
		// The constant 'vBernoulli179'
		public Bernoulli vBernoulli179;
		// Message from definition of 'vbool341'
		public Bernoulli vbool341_F;
		// Messages from uses of 'vbool347'
		public Bernoulli[] vbool347_uses_B;
		// The constant 'vBernoulli185'
		public Bernoulli vBernoulli185;
		// Message from definition of 'vbool347'
		public Bernoulli vbool347_F;
		// Messages from uses of 'vbool348'
		public Bernoulli[] vbool348_uses_B;
		// Message from definition of 'vbool348'
		public Bernoulli vbool348_F;
		// Messages from uses of 'vbool337'
		public Bernoulli[] vbool337_uses_B;
		// The constant 'vBernoulli175'
		public Bernoulli vBernoulli175;
		// Message from definition of 'vbool337'
		public Bernoulli vbool337_F;
		// Messages from uses of 'vbool343'
		public Bernoulli[] vbool343_uses_B;
		// The constant 'vBernoulli181'
		public Bernoulli vBernoulli181;
		// Message from definition of 'vbool343'
		public Bernoulli vbool343_F;
		// Messages from uses of 'vbool349'
		public Bernoulli[] vbool349_uses_B;
		// Message from definition of 'vbool349'
		public Bernoulli vbool349_F;
		// Messages from uses of 'vbool350'
		public Bernoulli[] vbool350_uses_B;
		// Message from definition of 'vbool350'
		public Bernoulli vbool350_F;
		// Messages from uses of 'vbool338'
		public Bernoulli[] vbool338_uses_B;
		// The constant 'vBernoulli176'
		public Bernoulli vBernoulli176;
		// Message from definition of 'vbool338'
		public Bernoulli vbool338_F;
		// Messages from uses of 'vbool344'
		public Bernoulli[] vbool344_uses_B;
		// The constant 'vBernoulli182'
		public Bernoulli vBernoulli182;
		// Message from definition of 'vbool344'
		public Bernoulli vbool344_F;
		// Messages from uses of 'vbool351'
		public Bernoulli[] vbool351_uses_B;
		// Message from definition of 'vbool351'
		public Bernoulli vbool351_F;
		// Messages from uses of 'vbool352'
		public Bernoulli[] vbool352_uses_B;
		// Message from definition of 'vbool352'
		public Bernoulli vbool352_F;
		// Messages from uses of 'vbool339'
		public Bernoulli[] vbool339_uses_B;
		// The constant 'vBernoulli177'
		public Bernoulli vBernoulli177;
		// Message from definition of 'vbool339'
		public Bernoulli vbool339_F;
		// Messages from uses of 'vbool345'
		public Bernoulli[] vbool345_uses_B;
		// The constant 'vBernoulli183'
		public Bernoulli vBernoulli183;
		// Message from definition of 'vbool345'
		public Bernoulli vbool345_F;
		// Messages from uses of 'vbool353'
		public Bernoulli[] vbool353_uses_B;
		// Message from definition of 'vbool353'
		public Bernoulli vbool353_F;
		// Messages from uses of 'vbool354'
		public Bernoulli[] vbool354_uses_B;
		// Message from definition of 'vbool354'
		public Bernoulli vbool354_F;
		// Messages from uses of 'vbool340'
		public Bernoulli[] vbool340_uses_B;
		// The constant 'vBernoulli178'
		public Bernoulli vBernoulli178;
		// Message from definition of 'vbool340'
		public Bernoulli vbool340_F;
		// Messages from uses of 'vbool346'
		public Bernoulli[] vbool346_uses_B;
		// The constant 'vBernoulli184'
		public Bernoulli vBernoulli184;
		// Message from definition of 'vbool346'
		public Bernoulli vbool346_F;
		// Messages from uses of 'vbool355'
		public Bernoulli[] vbool355_uses_B;
		// Message from definition of 'vbool355'
		public Bernoulli vbool355_F;
		// Messages from uses of 'vbool356'
		public Bernoulli[] vbool356_uses_B;
		// Message from definition of 'vbool356'
		public Bernoulli vbool356_F;
		// Message to definition of 'vbool348'
		public Bernoulli vbool348_B;
		// Messages to uses of 'vbool347'
		public Bernoulli[] vbool347_uses_F;
		// Messages to uses of 'vbool341'
		public Bernoulli[] vbool341_uses_F;
		// Message to definition of 'vbool350'
		public Bernoulli vbool350_B;
		// Messages to uses of 'vbool349'
		public Bernoulli[] vbool349_uses_F;
		// Message to definition of 'vbool349'
		public Bernoulli vbool349_B;
		// Messages to uses of 'vbool343'
		public Bernoulli[] vbool343_uses_F;
		// Messages to uses of 'vbool337'
		public Bernoulli[] vbool337_uses_F;
		// Messages to uses of 'vbool348'
		public Bernoulli[] vbool348_uses_F;
		// Message to definition of 'vbool352'
		public Bernoulli vbool352_B;
		// Messages to uses of 'vbool351'
		public Bernoulli[] vbool351_uses_F;
		// Message to definition of 'vbool351'
		public Bernoulli vbool351_B;
		// Messages to uses of 'vbool344'
		public Bernoulli[] vbool344_uses_F;
		// Messages to uses of 'vbool338'
		public Bernoulli[] vbool338_uses_F;
		// Messages to uses of 'vbool350'
		public Bernoulli[] vbool350_uses_F;
		// Message to definition of 'vbool354'
		public Bernoulli vbool354_B;
		// Messages to uses of 'vbool353'
		public Bernoulli[] vbool353_uses_F;
		// Message to definition of 'vbool353'
		public Bernoulli vbool353_B;
		// Messages to uses of 'vbool345'
		public Bernoulli[] vbool345_uses_F;
		// Messages to uses of 'vbool339'
		public Bernoulli[] vbool339_uses_F;
		// Messages to uses of 'vbool352'
		public Bernoulli[] vbool352_uses_F;
		// Message to definition of 'vbool356'
		public Bernoulli vbool356_B;
		// Messages to uses of 'vbool355'
		public Bernoulli[] vbool355_uses_F;
		// Message to definition of 'vbool355'
		public Bernoulli vbool355_B;
		// Messages to uses of 'vbool346'
		public Bernoulli[] vbool346_uses_F;
		// Messages to uses of 'vbool340'
		public Bernoulli[] vbool340_uses_F;
		// Messages to uses of 'vbool354'
		public Bernoulli[] vbool354_uses_F;
		// The constant 'vBernoulli155'
		public Bernoulli vBernoulli155;
		// Message to marginal of 'vbool348'
		public Bernoulli vbool348_marginal_B;
		// Message to marginal of 'vbool349'
		public Bernoulli vbool349_marginal_B;
		// Message to marginal of 'vbool350'
		public Bernoulli vbool350_marginal_B;
		// Message to marginal of 'vbool351'
		public Bernoulli vbool351_marginal_B;
		// Message to marginal of 'vbool352'
		public Bernoulli vbool352_marginal_B;
		// Message to marginal of 'vbool353'
		public Bernoulli vbool353_marginal_B;
		// Message to marginal of 'vbool354'
		public Bernoulli vbool354_marginal_B;
		// Message to marginal of 'vbool355'
		public Bernoulli vbool355_marginal_B;
		// Message to marginal of 'vbool356'
		public Bernoulli vbool356_marginal_B;
		// Message to marginal of 'vbool341'
		public Bernoulli vbool341_marginal_B;
		// Message to marginal of 'vbool347'
		public Bernoulli vbool347_marginal_B;
		// Message to marginal of 'vbool337'
		public Bernoulli vbool337_marginal_B;
		// Message to marginal of 'vbool343'
		public Bernoulli vbool343_marginal_B;
		// Message to marginal of 'vbool338'
		public Bernoulli vbool338_marginal_B;
		// Message to marginal of 'vbool344'
		public Bernoulli vbool344_marginal_B;
		// Message to marginal of 'vbool339'
		public Bernoulli vbool339_marginal_B;
		// Message to marginal of 'vbool345'
		public Bernoulli vbool345_marginal_B;
		// Message to marginal of 'vbool340'
		public Bernoulli vbool340_marginal_B;
		// Message to marginal of 'vbool346'
		public Bernoulli vbool346_marginal_B;
		#endregion

		#region Methods
		/// <summary>
		/// Configures constant values that will not change during the lifetime of the class.
		/// </summary>
		/// <remarks>
		/// This method should be called once only after the class is instantiated.  In future, it will likely become
		/// the class constructor.
		/// </remarks>
		public void Reset()
		{
			// Create array for 'vbool341_uses' backwards messages.
			this.vbool341_uses_B = new Bernoulli[1];
			this.vBernoulli179 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool341_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli179);
			}
			this.vbool341_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli179);
			// Message to 'vbool341' from Random factor
			this.vbool341_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli179);
			// Create array for 'vbool347_uses' backwards messages.
			this.vbool347_uses_B = new Bernoulli[1];
			this.vBernoulli185 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool347_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli185);
			}
			this.vbool347_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli185);
			// Message to 'vbool347' from Random factor
			this.vbool347_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli185);
			// Create array for 'vbool348_uses' backwards messages.
			this.vbool348_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool348_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool348_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool337_uses' backwards messages.
			this.vbool337_uses_B = new Bernoulli[1];
			this.vBernoulli175 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool337_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli175);
			}
			this.vbool337_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli175);
			// Message to 'vbool337' from Random factor
			this.vbool337_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli175);
			// Create array for 'vbool343_uses' backwards messages.
			this.vbool343_uses_B = new Bernoulli[1];
			this.vBernoulli181 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool343_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli181);
			}
			this.vbool343_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli181);
			// Message to 'vbool343' from Random factor
			this.vbool343_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli181);
			// Create array for 'vbool349_uses' backwards messages.
			this.vbool349_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool349_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool349_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool350_uses' backwards messages.
			this.vbool350_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool350_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool350_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool338_uses' backwards messages.
			this.vbool338_uses_B = new Bernoulli[1];
			this.vBernoulli176 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool338_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli176);
			}
			this.vbool338_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli176);
			// Message to 'vbool338' from Random factor
			this.vbool338_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli176);
			// Create array for 'vbool344_uses' backwards messages.
			this.vbool344_uses_B = new Bernoulli[1];
			this.vBernoulli182 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool344_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli182);
			}
			this.vbool344_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli182);
			// Message to 'vbool344' from Random factor
			this.vbool344_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli182);
			// Create array for 'vbool351_uses' backwards messages.
			this.vbool351_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool351_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool351_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool352_uses' backwards messages.
			this.vbool352_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool352_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool352_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool339_uses' backwards messages.
			this.vbool339_uses_B = new Bernoulli[1];
			this.vBernoulli177 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool339_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli177);
			}
			this.vbool339_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli177);
			// Message to 'vbool339' from Random factor
			this.vbool339_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli177);
			// Create array for 'vbool345_uses' backwards messages.
			this.vbool345_uses_B = new Bernoulli[1];
			this.vBernoulli183 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool345_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli183);
			}
			this.vbool345_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli183);
			// Message to 'vbool345' from Random factor
			this.vbool345_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli183);
			// Create array for 'vbool353_uses' backwards messages.
			this.vbool353_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool353_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool353_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool354_uses' backwards messages.
			this.vbool354_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool354_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool354_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool340_uses' backwards messages.
			this.vbool340_uses_B = new Bernoulli[1];
			this.vBernoulli178 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool340_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli178);
			}
			this.vbool340_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli178);
			// Message to 'vbool340' from Random factor
			this.vbool340_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli178);
			// Create array for 'vbool346_uses' backwards messages.
			this.vbool346_uses_B = new Bernoulli[1];
			this.vBernoulli184 = new Bernoulli(0.166666666666667);
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool346_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli184);
			}
			this.vbool346_F = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli184);
			// Message to 'vbool346' from Random factor
			this.vbool346_F = UnaryOp<bool>.RandomAverageConditional<Bernoulli>(this.vBernoulli184);
			// Create array for 'vbool355_uses' backwards messages.
			this.vbool355_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool355_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool355_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool356_uses' backwards messages.
			this.vbool356_uses_B = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool356_uses_B[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool356_F = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool348_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool347_uses' forwards messages.
			this.vbool347_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool347_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli185);
			}
			// Message to 'vbool347_uses' from UsesEqualDef factor
			this.vbool347_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool347_uses_B, this.vbool347_F, 0, this.vbool347_uses_F[0]);
			// Create array for 'vbool341_uses' forwards messages.
			this.vbool341_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool341_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli179);
			}
			// Message to 'vbool341_uses' from UsesEqualDef factor
			this.vbool341_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool341_uses_B, this.vbool341_F, 0, this.vbool341_uses_F[0]);
			// Message to 'vbool348' from AreEqual factor
			this.vbool348_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool341_uses_F[0], this.vbool347_uses_F[0]);
			this.vbool350_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool349_uses' forwards messages.
			this.vbool349_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool349_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool349_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool343_uses' forwards messages.
			this.vbool343_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool343_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli181);
			}
			// Message to 'vbool343_uses' from UsesEqualDef factor
			this.vbool343_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool343_uses_B, this.vbool343_F, 0, this.vbool343_uses_F[0]);
			// Create array for 'vbool337_uses' forwards messages.
			this.vbool337_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool337_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli175);
			}
			// Message to 'vbool337_uses' from UsesEqualDef factor
			this.vbool337_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool337_uses_B, this.vbool337_F, 0, this.vbool337_uses_F[0]);
			// Message to 'vbool349' from AreEqual factor
			this.vbool349_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool337_uses_F[0], this.vbool343_uses_F[0]);
			// Message to 'vbool349_uses' from ReplicateWithMarginal factor
			this.vbool349_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool349_uses_B, this.vbool349_F, 0, this.vbool349_uses_F[0]);
			// Create array for 'vbool348_uses' forwards messages.
			this.vbool348_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool348_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			// Message to 'vbool348_uses' from ReplicateWithMarginal factor
			this.vbool348_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool348_uses_B, this.vbool348_F, 0, this.vbool348_uses_F[0]);
			// Message to 'vbool350' from And factor
			this.vbool350_F = BooleanAndOp.AndAverageConditional(this.vbool348_uses_F[0], this.vbool349_uses_F[0]);
			this.vbool352_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool351_uses' forwards messages.
			this.vbool351_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool351_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool351_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool344_uses' forwards messages.
			this.vbool344_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool344_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli182);
			}
			// Message to 'vbool344_uses' from UsesEqualDef factor
			this.vbool344_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool344_uses_B, this.vbool344_F, 0, this.vbool344_uses_F[0]);
			// Create array for 'vbool338_uses' forwards messages.
			this.vbool338_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool338_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli176);
			}
			// Message to 'vbool338_uses' from UsesEqualDef factor
			this.vbool338_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool338_uses_B, this.vbool338_F, 0, this.vbool338_uses_F[0]);
			// Message to 'vbool351' from AreEqual factor
			this.vbool351_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool338_uses_F[0], this.vbool344_uses_F[0]);
			// Message to 'vbool351_uses' from ReplicateWithMarginal factor
			this.vbool351_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool351_uses_B, this.vbool351_F, 0, this.vbool351_uses_F[0]);
			// Create array for 'vbool350_uses' forwards messages.
			this.vbool350_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool350_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			// Message to 'vbool350_uses' from ReplicateWithMarginal factor
			this.vbool350_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool350_uses_B, this.vbool350_F, 0, this.vbool350_uses_F[0]);
			// Message to 'vbool352' from And factor
			this.vbool352_F = BooleanAndOp.AndAverageConditional(this.vbool350_uses_F[0], this.vbool351_uses_F[0]);
			this.vbool354_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool353_uses' forwards messages.
			this.vbool353_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool353_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool353_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool345_uses' forwards messages.
			this.vbool345_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool345_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli183);
			}
			// Message to 'vbool345_uses' from UsesEqualDef factor
			this.vbool345_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool345_uses_B, this.vbool345_F, 0, this.vbool345_uses_F[0]);
			// Create array for 'vbool339_uses' forwards messages.
			this.vbool339_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool339_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli177);
			}
			// Message to 'vbool339_uses' from UsesEqualDef factor
			this.vbool339_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool339_uses_B, this.vbool339_F, 0, this.vbool339_uses_F[0]);
			// Message to 'vbool353' from AreEqual factor
			this.vbool353_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool339_uses_F[0], this.vbool345_uses_F[0]);
			// Message to 'vbool353_uses' from ReplicateWithMarginal factor
			this.vbool353_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool353_uses_B, this.vbool353_F, 0, this.vbool353_uses_F[0]);
			// Create array for 'vbool352_uses' forwards messages.
			this.vbool352_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool352_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			// Message to 'vbool352_uses' from ReplicateWithMarginal factor
			this.vbool352_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool352_uses_B, this.vbool352_F, 0, this.vbool352_uses_F[0]);
			// Message to 'vbool354' from And factor
			this.vbool354_F = BooleanAndOp.AndAverageConditional(this.vbool352_uses_F[0], this.vbool353_uses_F[0]);
			this.vbool356_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool355_uses' forwards messages.
			this.vbool355_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool355_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			this.vbool355_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			// Create array for 'vbool346_uses' forwards messages.
			this.vbool346_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool346_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli184);
			}
			// Message to 'vbool346_uses' from UsesEqualDef factor
			this.vbool346_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool346_uses_B, this.vbool346_F, 0, this.vbool346_uses_F[0]);
			// Create array for 'vbool340_uses' forwards messages.
			this.vbool340_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool340_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(this.vBernoulli178);
			}
			// Message to 'vbool340_uses' from UsesEqualDef factor
			this.vbool340_uses_F[0] = UsesEqualDefOp.UsesAverageConditional<Bernoulli>(this.vbool340_uses_B, this.vbool340_F, 0, this.vbool340_uses_F[0]);
			// Message to 'vbool355' from AreEqual factor
			this.vbool355_F = BooleanAreEqualOp.AreEqualAverageConditional(this.vbool340_uses_F[0], this.vbool346_uses_F[0]);
			// Message to 'vbool355_uses' from ReplicateWithMarginal factor
			this.vbool355_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool355_uses_B, this.vbool355_F, 0, this.vbool355_uses_F[0]);
			// Create array for 'vbool354_uses' forwards messages.
			this.vbool354_uses_F = new Bernoulli[1];
			for(int _ind0 = 0; _ind0<1; _ind0++)
			{
				this.vbool354_uses_F[_ind0] = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			}
			// Message to 'vbool354_uses' from ReplicateWithMarginal factor
			this.vbool354_uses_F[0] = ReplicateOp.UsesAverageConditional<Bernoulli>(this.vbool354_uses_B, this.vbool354_F, 0, this.vbool354_uses_F[0]);
			// Message to 'vbool356' from And factor
			this.vbool356_F = BooleanAndOp.AndAverageConditional(this.vbool354_uses_F[0], this.vbool355_uses_F[0]);
			this.vBernoulli155 = new Bernoulli(0.8);
			// Message to 'vbool356_uses' from EqualRandom factor
			this.vbool356_uses_B[0] = ConstrainEqualRandomOp<bool>.ValueAverageConditional<Bernoulli>(this.vBernoulli155);
			// Message to 'vbool356' from ReplicateWithMarginal factor
			this.vbool356_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool356_uses_B, this.vbool356_B);
			// Message to 'vbool354_uses' from And factor
			this.vbool354_uses_B[0] = BooleanAndOp.AAverageConditional(this.vbool356_B, this.vbool355_uses_F[0]);
			// Message to 'vbool355_uses' from And factor
			this.vbool355_uses_B[0] = BooleanAndOp.BAverageConditional(this.vbool356_B, this.vbool354_uses_F[0]);
			// Message to 'vbool354' from ReplicateWithMarginal factor
			this.vbool354_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool354_uses_B, this.vbool354_B);
			// Message to 'vbool352_uses' from And factor
			this.vbool352_uses_B[0] = BooleanAndOp.AAverageConditional(this.vbool354_B, this.vbool353_uses_F[0]);
			// Message to 'vbool353_uses' from And factor
			this.vbool353_uses_B[0] = BooleanAndOp.BAverageConditional(this.vbool354_B, this.vbool352_uses_F[0]);
			// Message to 'vbool352' from ReplicateWithMarginal factor
			this.vbool352_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool352_uses_B, this.vbool352_B);
			// Message to 'vbool350_uses' from And factor
			this.vbool350_uses_B[0] = BooleanAndOp.AAverageConditional(this.vbool352_B, this.vbool351_uses_F[0]);
			// Message to 'vbool351_uses' from And factor
			this.vbool351_uses_B[0] = BooleanAndOp.BAverageConditional(this.vbool352_B, this.vbool350_uses_F[0]);
			// Message to 'vbool350' from ReplicateWithMarginal factor
			this.vbool350_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool350_uses_B, this.vbool350_B);
			// Message to 'vbool348_uses' from And factor
			this.vbool348_uses_B[0] = BooleanAndOp.AAverageConditional(this.vbool350_B, this.vbool349_uses_F[0]);
			// Message to 'vbool349_uses' from And factor
			this.vbool349_uses_B[0] = BooleanAndOp.BAverageConditional(this.vbool350_B, this.vbool348_uses_F[0]);
			// Message to 'vbool348' from ReplicateWithMarginal factor
			this.vbool348_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool348_uses_B, this.vbool348_B);
			// Message to 'vbool341_uses' from AreEqual factor
			this.vbool341_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool348_B, this.vbool347_uses_F[0]);
			// Message to 'vbool347_uses' from AreEqual factor
			this.vbool347_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool348_B, this.vbool341_uses_F[0]);
			// Message to 'vbool349' from ReplicateWithMarginal factor
			this.vbool349_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool349_uses_B, this.vbool349_B);
			// Message to 'vbool337_uses' from AreEqual factor
			this.vbool337_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool349_B, this.vbool343_uses_F[0]);
			// Message to 'vbool343_uses' from AreEqual factor
			this.vbool343_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool349_B, this.vbool337_uses_F[0]);
			// Message to 'vbool351' from ReplicateWithMarginal factor
			this.vbool351_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool351_uses_B, this.vbool351_B);
			// Message to 'vbool338_uses' from AreEqual factor
			this.vbool338_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool351_B, this.vbool344_uses_F[0]);
			// Message to 'vbool344_uses' from AreEqual factor
			this.vbool344_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool351_B, this.vbool338_uses_F[0]);
			// Message to 'vbool353' from ReplicateWithMarginal factor
			this.vbool353_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool353_uses_B, this.vbool353_B);
			// Message to 'vbool339_uses' from AreEqual factor
			this.vbool339_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool353_B, this.vbool345_uses_F[0]);
			// Message to 'vbool345_uses' from AreEqual factor
			this.vbool345_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool353_B, this.vbool339_uses_F[0]);
			// Message to 'vbool355' from ReplicateWithMarginal factor
			this.vbool355_B = ReplicateOp.DefAverageConditional<Bernoulli>(this.vbool355_uses_B, this.vbool355_B);
			// Message to 'vbool340_uses' from AreEqual factor
			this.vbool340_uses_B[0] = BooleanAreEqualOp.AAverageConditional(this.vbool355_B, this.vbool346_uses_F[0]);
			// Message to 'vbool346_uses' from AreEqual factor
			this.vbool346_uses_B[0] = BooleanAreEqualOp.BAverageConditional(this.vbool355_B, this.vbool340_uses_F[0]);
		}

		/// <summary>
		/// Creates message arrays and initialises their values ready for inference to be performed.
		/// </summary>
		/// <remarks>
		/// This method should be called once each time inference is performed. Since the initialisation
		/// procedure normally dependson external values such as priors and array sizes, all external
		/// values must be set before calling this method.
		/// 
		/// As well as initialising message arrays, this method also performs any message passing that
		/// the scheduler determines need only be carried out once.
		/// </remarks>
		public void Initialise()
		{
			this.vbool348_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool349_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool350_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool351_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool352_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool353_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool354_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool355_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool356_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(new Bernoulli());
			this.vbool341_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli179);
			this.vbool347_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli185);
			this.vbool337_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli175);
			this.vbool343_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli181);
			this.vbool338_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli176);
			this.vbool344_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli182);
			this.vbool339_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli177);
			this.vbool345_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli183);
			this.vbool340_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli178);
			this.vbool346_marginal_B = ArrayHelper.MakeUniform<Bernoulli>(vBernoulli184);
			// Message to 'vbool356_marginal' from ReplicateWithMarginal factor
			this.vbool356_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool356_uses_B, this.vbool356_F, this.vbool356_marginal_B);
			// Message to 'vbool354_marginal' from ReplicateWithMarginal factor
			this.vbool354_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool354_uses_B, this.vbool354_F, this.vbool354_marginal_B);
			// Message to 'vbool355_marginal' from ReplicateWithMarginal factor
			this.vbool355_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool355_uses_B, this.vbool355_F, this.vbool355_marginal_B);
			// Message to 'vbool352_marginal' from ReplicateWithMarginal factor
			this.vbool352_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool352_uses_B, this.vbool352_F, this.vbool352_marginal_B);
			// Message to 'vbool353_marginal' from ReplicateWithMarginal factor
			this.vbool353_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool353_uses_B, this.vbool353_F, this.vbool353_marginal_B);
			// Message to 'vbool350_marginal' from ReplicateWithMarginal factor
			this.vbool350_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool350_uses_B, this.vbool350_F, this.vbool350_marginal_B);
			// Message to 'vbool351_marginal' from ReplicateWithMarginal factor
			this.vbool351_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool351_uses_B, this.vbool351_F, this.vbool351_marginal_B);
			// Message to 'vbool348_marginal' from ReplicateWithMarginal factor
			this.vbool348_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool348_uses_B, this.vbool348_F, this.vbool348_marginal_B);
			// Message to 'vbool349_marginal' from ReplicateWithMarginal factor
			this.vbool349_marginal_B = ReplicateOp.MarginalAverageConditional<Bernoulli>(this.vbool349_uses_B, this.vbool349_F, this.vbool349_marginal_B);
			// Message to 'vbool341_marginal' from UsesEqualDef factor
			this.vbool341_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool341_uses_B, this.vbool341_F, this.vbool341_marginal_B);
			// Message to 'vbool347_marginal' from UsesEqualDef factor
			this.vbool347_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool347_uses_B, this.vbool347_F, this.vbool347_marginal_B);
			// Message to 'vbool337_marginal' from UsesEqualDef factor
			this.vbool337_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool337_uses_B, this.vbool337_F, this.vbool337_marginal_B);
			// Message to 'vbool343_marginal' from UsesEqualDef factor
			this.vbool343_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool343_uses_B, this.vbool343_F, this.vbool343_marginal_B);
			// Message to 'vbool338_marginal' from UsesEqualDef factor
			this.vbool338_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool338_uses_B, this.vbool338_F, this.vbool338_marginal_B);
			// Message to 'vbool344_marginal' from UsesEqualDef factor
			this.vbool344_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool344_uses_B, this.vbool344_F, this.vbool344_marginal_B);
			// Message to 'vbool339_marginal' from UsesEqualDef factor
			this.vbool339_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool339_uses_B, this.vbool339_F, this.vbool339_marginal_B);
			// Message to 'vbool345_marginal' from UsesEqualDef factor
			this.vbool345_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool345_uses_B, this.vbool345_F, this.vbool345_marginal_B);
			// Message to 'vbool340_marginal' from UsesEqualDef factor
			this.vbool340_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool340_uses_B, this.vbool340_F, this.vbool340_marginal_B);
			// Message to 'vbool346_marginal' from UsesEqualDef factor
			this.vbool346_marginal_B = UsesEqualDefOp.MarginalAverageConditional<Bernoulli>(this.vbool346_uses_B, this.vbool346_F, this.vbool346_marginal_B);
		}

		/// <summary>
		/// Performs one iteration of inference.
		/// </summary>
		/// <remarks>
		/// This method should be called multiple times, after calling Initialise(), in order to perform
		/// multiple iterations of message passing.  You can call methods to retrieve posterior marginals
		/// at any time - the returned marginal will be the estimated marginal given the current state of
		/// the message passing algorithm.  This can be useful for monitoring convergence of the algorithm.
		/// 
		/// Where the scheduler has determined inference can be performed without iteration, this method
		/// does nothing.
		/// </remarks>
		public void Update()
		{
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool356' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool356Marginal()
		{
			return this.vbool356_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool354' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool354Marginal()
		{
			return this.vbool354_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool355' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool355Marginal()
		{
			return this.vbool355_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool352' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool352Marginal()
		{
			return this.vbool352_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool353' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool353Marginal()
		{
			return this.vbool353_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool350' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool350Marginal()
		{
			return this.vbool350_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool351' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool351Marginal()
		{
			return this.vbool351_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool348' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool348Marginal()
		{
			return this.vbool348_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool349' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool349Marginal()
		{
			return this.vbool349_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool341' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool341Marginal()
		{
			return this.vbool341_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool347' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool347Marginal()
		{
			return this.vbool347_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool337' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool337Marginal()
		{
			return this.vbool337_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool343' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool343Marginal()
		{
			return this.vbool343_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool338' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool338Marginal()
		{
			return this.vbool338_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool344' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool344Marginal()
		{
			return this.vbool344_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool339' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool339Marginal()
		{
			return this.vbool339_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool345' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool345Marginal()
		{
			return this.vbool345_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool340' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool340Marginal()
		{
			return this.vbool340_marginal_B;
		}

		/// <summary>
		/// Returns the marginal distribution for 'vbool346' given by the current state of the
		/// message passing algorithm.
		/// </summary>
		/// <returns>The marginal distribution</returns>
		public Bernoulli Vbool346Marginal()
		{
			return this.vbool346_marginal_B;
		}

		#endregion

	}

}
